package br.ufes.ceunes.poo.model.DAO;


import br.ufes.ceunes.poo.model.pojo.Fornecedor;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
import javax.swing.JOptionPane;

public class FornecedorDAO {
    static String arquivo="fornecedores.txt";
    private int idFornecedor = 0;
    private ArrayList<Fornecedor> fornecedores = null;
    private static FornecedorDAO instancia = null;

    /**
     *
     * @return 
     */

    public static synchronized FornecedorDAO getInstancia(){
        if(instancia == null){
            instancia = new FornecedorDAO();
        }
        return instancia;
    }

    public FornecedorDAO() {
        this.fornecedores = new ArrayList<>();
    }
    public ArrayList<Fornecedor> getFornecedores(){
        return this.fornecedores;
    }
    public void adicionarFornecedorArquivo(String nome,String telefone,String endereco,int id)
    {
            Fornecedor f1 = new Fornecedor();
            f1.setEndereco(endereco);
            f1.setNome(nome);
            f1.setTelefone(telefone);
            f1.setIdFornecedor(id);
            this.fornecedores.add(f1);
    }
    public void lerArquivoFornecedor(){
        int i,qt;
        String nome,endereco,id,telefone;
        Scanner sc;
        try
        {  
            sc = new Scanner(new FileReader(new File(arquivo))); 
            while(sc.hasNext())
            {
                String valor = sc.nextLine();
                this.idFornecedor = Integer.parseInt(valor);
                valor = sc.nextLine();
                qt = Integer.parseInt(valor);
                for(i=0;i<qt;i++){
                        nome = sc.nextLine();
                        telefone = sc.nextLine();
                        endereco = sc.nextLine();
                        id = sc.nextLine();
                        adicionarFornecedorArquivo(nome,telefone,endereco,Integer.parseInt(id));
                }

            }
        }catch (FileNotFoundException e)
        { 
            try
            {  
                 File file = new File("arquivo");  
                 boolean success = file.createNewFile();  
                 if (success) {  
                 } else {  
                 }  
            } catch (IOException ee) 
            {  
                JOptionPane.showMessageDialog(null, "Erro ao Criar "+arquivo);
            }
        } 
    }
    public void gravarArquivoFornecedor()
    {
        String texto;
        int i;
        try
        {
            File arquivu = new File(arquivo);
            try (FileOutputStream fos = new FileOutputStream(arquivu)) {
                texto = this.idFornecedor+"\r\n";
                fos.write(texto.getBytes());
                texto = this.fornecedores.size()+"\r\n";
                fos.write(texto.getBytes());
                texto ="\r\n";
                for(i=0;i<this.fornecedores.size();i++)
                {
                    fos.write(this.fornecedores.get(i).getNome().getBytes());
                    fos.write(texto.getBytes());
                    fos.write(this.fornecedores.get(i).getTelefone().getBytes());
                    fos.write(texto.getBytes());
                    fos.write(this.fornecedores.get(i).getEndereco().getBytes());
                    fos.write(texto.getBytes());
                    texto = this.fornecedores.get(i).getIdFornecedor()+"\r\n";
                    fos.write(texto.getBytes());
                    texto ="\r\n";
                }
            }
        }catch (IOException ee)
        { 
            System.out.println("Erro ao salvar arquivo em "+arquivo);
        }
    }
	
    public void cadastroFornecedor(Fornecedor f)
    {
        this.idFornecedor++;
        f.setIdFornecedor(this.idFornecedor);
        this.fornecedores.add(f);
    }
    public int verExisteNome(String nome)
    {
        int i;
        for(i=0;i<this.fornecedores.size();i++)
        {
            if(nome.equals(this.fornecedores.get(i).getNome()))return 1;
        }
        return 0;
    }
    public Fornecedor acharFornecedor(String nome)
    {
        int i;
        for(i=0;i<this.fornecedores.size();i++)
        {
            if(nome.equals(this.fornecedores.get(i).getNome()))return this.fornecedores.get(i);
        }
        return null;
    }
}
